package auth_dao

import (
	"admin-system/internal/models/auth_model"
	"context"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

type AdminDao struct {
	DB *gorm.DB
}

func NewAdminDao(DB *gorm.DB) *AdminDao {
	return &AdminDao{DB: DB}
}

// GetByUsername 根据用户名获取用户信息
// @description: 根据用户名获取用户信息(登录时使用)
// @param username 用户名
// @return *auth_model.Admin
func (d *AdminDao) GetByUsername(ctx context.Context, username string) (*auth_model.Admin, error) {
	var admin auth_model.Admin
	if err := d.DB.WithContext(ctx).Where("username = ?", username).First(&admin).Error; err != nil {
		return nil, err
	}
	return &admin, nil
}

// GetUserInfoByID 根据用户ID获取用户信息
// @description: 根据用户ID获取用户信息(获取用户信息时使用)
// @param userId 用户ID
// @return *auth_model.Admin
func (d *AdminDao) GetUserInfoByID(c *gin.Context, userId int64) (*auth_model.Admin, error) {
	var admin auth_model.Admin
	if err := d.DB.WithContext(c).Where("status = 1 AND id = ?", userId).First(&admin).Error; err != nil {
		return nil, err
	}
	return &admin, nil
}

// CreateAdminUser  创建用户
// @description: 创建用户
// @param req 创建用户请求参数
func (d *AdminDao) CreateAdminUser(c *gin.Context, admin *auth_model.Admin) error {
	return d.DB.WithContext(c).Create(&admin).Error
}
